package com.gome.ss.core.queue;


public interface QueueCacheInterface<T> {
	static final int maxPriority = 2;
	static final int minPriority = -2;
	static final int defaultPriority = 0;
	static final int priorityInterval = 1;

	/** 
	 * 增加一个元索 如果队列已满
	 * @param obj
	 * @param priority
	 */
	public void add(T obj, Integer priority);
	
	/** 
	 * 移除一个元素 如果队列为空
	 * @param obj
	 */
	public void remove(T obj);
	
	/** 
	 * 检测队列是否包含元素
	 * @param obj
	 * @return true 包含 false 不包含
	 */
	public boolean contains(T obj);
	
	/** 
	 * 队列是否为空
	 * @return true 空 false 非空
	 */
	public boolean isEmpty();
	
	/** 
	 * 移除并返回队列头部的元素
	 * @return 队列头部元素
	 */
	public T element();
	
	/** 
	 * 添加一个元素 如果队列已满，则返回false
	 * @param obj
	 * @param priority
	 * @return true 成功 false 队列已满
	 */
	public boolean offer(T obj, Integer priority);
	
	/** 
	 * 移除并返问队列头部的元素 如果队列为空，则返回null
	 * @return 头部元素
	 */
	public T poll();
	
	/** 
	 * 返回队列头部的元素  如果队列为空，则返回null
	 * @return 头部元素
	 */
	public T peek();
	
	/** 
	 * 添加一个元素 如果队列满，则阻塞
	 * @param obj
	 * @param priority
	 */
	public void put(T obj, Integer priority);
	
	/** 
	 * 移除并返回队列头部的元素 如果队列为空，则阻塞
	 * @return 头部的元素
	 */
	public T take();
}
